// import com.alibaba.druid.sql.ast.SQLCurrentTimeExpr;
// import com.alibaba.druid.sql.ast.SQLCurrentUserExpr;
// import com.alibaba.druid.sql.ast.SQLExpr;
// import com.alibaba.druid.sql.ast.expr.*;
// import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition;
// import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlOutFileExpr;
// import com.alibaba.druid.sql.parser.*;
// import com.alibaba.druid.util.FnvHash;

// import java.util.Arrays;
#pragma once
#include "../../../../utils/common_ptr.h"
#include "../../../parser/SQLExprParser.h"

class HiveExprParser : public SQLExprParser
{
public:
  static std::shared_ptr<std::vector<string_ptr>> AGGREGATE_FUNCTIONS;
  static std::shared_ptr<std::vector<long>> AGGREGATE_FUNCTIONS_CODES;

  HiveExprParser(string_ptr sql);

  HiveExprParser(string_ptr sql, SQLParserFeature_list_ptr features);

  HiveExprParser(Lexer_ptr lexer);

  SQLExpr_ptr primaryRest(SQLExpr_ptr expr);

  SQLExpr_ptr primary();

  SQLExpr_ptr parseAliasExpr(string_ptr alias);

  SQLColumnDefinition_ptr parseColumnRest(SQLColumnDefinition_ptr column);

  SQLExpr_ptr parseInterval();

private:
  static BOOL_ptr __init;
  static BOOL_ptr init();
};
